/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fiap.dao;

import br.com.fiap.vo.AlunoVO;
import br.com.fiap.vo.PessoaVO;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Fabianoss
 */
public class AlunoDAO {
    
    private AlunoVO alunoVO;
    private String query;
    private Statement stmt;
    private PreparedStatement pstmt;
    private ResultSet result;
    private FabricaConexao fb;
    
    public AlunoDAO(){
         fb = FabricaConexao.getInstance();        
    }
    
    public void Salvar(AlunoVO alunoVO){
        this.query = "INSERT INTO `avaliacao1`.`aluno` (`idpessoa`)VALUES(?);";
          try {   
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1,alunoVO.getPessoaVO().getIdpessoa());            
            this.pstmt.execute(); 
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Aluno.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void update(AlunoVO alunoVO){
        this.query = "UPDATE `avaliacao1`.`aluno`SET `idpessoa` = ? WHERE idaluno = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, alunoVO.getPessoaVO().getIdpessoa());
            this.pstmt.setInt(2, alunoVO.getIdAluno());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Aluno.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void delete(AlunoVO alunoVO){        
       this.query = "DELETE FROM `avaliacao1`.`aluno`WHERE idaluno = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, alunoVO.getIdAluno());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Aluno.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
        
    }
    
    public List<AlunoVO> listarAlunosVO(){
        List<AlunoVO> lista = new ArrayList<AlunoVO>();
        this.query = "SELECT a.idaluno, p.idpessoa, p.nome FROM `avaliacao1`.`aluno` a,`avaliacao1`.`pessoa` p where a.idpessoa = p.idpessoa";
          try {
             this.stmt = fb.getConnection().createStatement();
             this.result = stmt.executeQuery(query);
             
             while(result.next()){
                 AlunoVO vo = new AlunoVO();
                 vo.setIdAluno(result.getInt("idaluno"));
                 PessoaVO pessoaVo = new PessoaVO();
                 pessoaVo.setIdpessoa(result.getInt("p.idpessoa"));
                 pessoaVo.setNome(result.getString("p.nome"));
                 vo.setPessoaVO(pessoaVo);
                 lista.add(vo);
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Aluno.: "+ e.getMessage());
        }finally{
             fb.closeConnection(null, stmt, result);
        }
        return lista;  
    }
    
     public AlunoVO getAlunoVOById(int id){
        
        this.query = "SELECT * FROM `avaliacao1`.`aluno` where idAluno = ?;";
        AlunoVO vo = new AlunoVO(); 
        try {
             this.stmt = fb.getConnection().createStatement();
             this.result = stmt.executeQuery(query);
             
             while(result.next()){
                
                 vo.setIdAluno(result.getInt("idaluno"));
                 //vo.setIdPessoa(result.getInt("idpessoa"));
                 
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Aluno.: "+ e.getMessage());
        }finally{
             fb.closeConnection(null, stmt, result);
        }
        return vo;  
    }
    
    public AlunoVO getAlunoVOByIdPessoa(int id){
        
        this.query = "SELECT * FROM `avaliacao1`.`aluno` where idpessoa = ?;";
        AlunoVO vo = new AlunoVO(); 
        try {
             this.pstmt = fb.getConnection().prepareStatement(query);
             this.pstmt.setInt(1, id);        
             this.result = pstmt.executeQuery();
             
             while(result.next()){
                
                 vo.setIdAluno(result.getInt("idaluno"));
                 PessoaVO pessoaVO = new PessoaVO();
                 pessoaVO.setIdpessoa(result.getInt("idpessoa"));
                 vo.setPessoaVO(pessoaVO);
                 
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Aluno.: "+ e.getMessage());
        }finally{
             fb.closeConnection(pstmt, null, result);
        }
        return vo;  
    } 
    
}

    